﻿using System.Collections.Generic;
using System.Linq;
using System.ServiceModel.Activation;
using Acaweb.Common;
using Acaweb.Model.Entities;
using Acaweb.Servicios.Contracts;
using Acaweb.Servicios.Security;
using Components = Acaweb.Componentes.Contracts;

namespace Acaweb.Servicios.Services
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class VotosService : IVotosService
    {
        Components.IVotosService _VotosComponent = AppCtx.Resolve<Components.IVotosService>();
        Components.IRepresentantesService _RepresentantesComponent = AppCtx.Resolve<Components.IRepresentantesService>();

        //TODO: Arregla esto si tienes autoestima
        public void Create(Votos Voto)
        {
            Representantes Representante = _RepresentantesComponent.GetById(Voto.CodigoAspirante);

            if (Representante != null)
            {
                User User = AuthenticationService.GetCurrent();
                if (Representante.IsDocente == 1 && User.Rol == Utility.Ambitos.Docente)
                {
                    Acaweb.Componentes.Contracts.IDocentesService _Docente = AppCtx.Resolve<Acaweb.Componentes.Contracts.IDocentesService>();
                    _VotosComponent.Create(Voto, _Docente.GetByUsername(User.getUserEmail()).NIT);
                }
                if (Representante.IsDocente == 0 && User.Rol == Utility.Ambitos.Estudiante)
                {
                    //if (User.Username.Contains("   "))
                    //    User.Username = User.Username.Substring(0, User.Username.IndexOf(" "));

                    _VotosComponent.Create(Voto, User.Username);
                }
            }
        }

        public void HackCreate(Votos Voto)
        {
            Representantes Representante = _RepresentantesComponent.GetById(Voto.CodigoAspirante);

            if (Representante != null)
            {
                _VotosComponent.Create(Voto);
            }
        }

        public List<Votos> GetAll()
        {
            List<Votos> Lista = _VotosComponent.GetAll().ToList();
            return Lista;
        }

        public List<Votos> GetByAspirantes(string Aspirante)
        {
            return _VotosComponent.GetByAspirantes(Aspirante).ToList();
        }

        public bool IsHabilitado()
        {
            string User = AuthenticationService.GetCurrent().Username;

            //if (User.Contains("   "))
            //    User = User.Substring(0, User.IndexOf(" "));

            return _VotosComponent.IsHabilitado(AuthenticationService.GetCurrent().Username);
        }
    }
}